package com.jf.cloud.product.service;

import com.jf.cloud.common.product.bo.EsProductBO;
import com.jf.cloud.common.product.vo.SpuVO;
import com.jf.cloud.common.product.vo.search.SpuAdminVO;
import com.jf.cloud.common.product.vo.search.SpuSearchVO;
import com.jf.cloud.product.model.SpuConsignmentChange;

import java.util.List;
import java.util.Map;

/**
 * @author zz
 * @date 2022/8/5 17:49
 * 供应商品变更后的操作
 */
public interface SupplierSpuUpdateLaterOperateService {
    /**
     * 供货价发生变化、sku种类增加，商家是手动设价，下架商家的商品
     * @param supplierSpuId
     */
    void skuUpdateLaterOperate(Long supplierSpuId);

    /**
     * 如果重量体积发生变化，商品是商家发货，下架商家商品
     * @param supplierSpuId
     */
    void skuWeightOrVolumeUpdateOperate(Long supplierSpuId);

    /**
     * sku增加，代销商品sku增加
     * @param supplierSpuId
     */
    void skuAddOperate(Long supplierSpuId);

    /**
     * 验证 当商家设置了手动设价--供货价高于售价自动下架商品 发布的商品售价是否低于供货价 低于就下架代销商品
     * @param esProductBO
     * @return
     */
    void feePriceUnderSupplyPrice(EsProductBO esProductBO);

    /**
     * 批量改变商品状态（上下架）
     * @param spuIds
     * @param status
     * @param sysType
     */
    void batchChangeSpuStatus(List<Long> spuIds, Integer status,Integer sysType);

    /**
     * 供应商品市场价变更后同步代销商品市场价
     * @param skuId
     * @param price
     */
    void synMarketPrice(Long skuId,Long price);

    /**
     * 供应商变更了商品信息，下架手动设价的代销商品
     * @param supplierSpuId
     * @param isFiltration
     * @param type
     */
    void soldOutManualPriceCommissionSpu(Long supplierSpuId,Integer type,Integer isFiltration);

    /**
     * 供应商品sku增加或者删除处理代销商品sku
     * @param supplierSpuId
     * @param skuId
     */
    void supplierSkuAddOrDeleteLaterOperate(Long supplierSpuId,Long skuId);

    /**
     * 供应商商品更新后代销商品同步更新
     * @param supplierSpuId
     */
    void changeSynUpdate(Long supplierSpuId);

    /**
     * 获取商品信息列表时 检查代销商品基本信息是否改变，如果改变了显示商家自己商品信息，没有改变则显示供应商信息
     * @param spuAdminVOS
     * @param supplierSpuMap
     * @return
     */
    List<SpuAdminVO> disposeSpuMsg(List<SpuAdminVO> spuAdminVOS, Map<Long, List<SpuVO>> supplierSpuMap);

    /**
     * 用户端获取商品信息列表时 检查代销商品基本信息是否改变，如果改变了显示商家自己商品信息，没有改变则显示供应商信息
     * @param spuSearchVOS
     * @param spuConsignmentChangeMap
     * @param supplierSpuMap
     * @return
     */
    List<SpuSearchVO> usDisposeSpuMsg(List<SpuSearchVO> spuSearchVOS, Map<Long, List<SpuConsignmentChange>> spuConsignmentChangeMap,Map<Long, List<SpuVO>> supplierSpuMap);

    /**
     * 供应商商品变更后对应下架不同类型的代销商品
     * @param supplierSpuId
     * @param commissionSpuOffType
     */
    void supplierSpuUpdateLaterOffSpu(Long supplierSpuId, Integer commissionSpuOffType);


}
